#ifndef ADAPTER_PATTERN_H
#define ADAPTER_PATTERN_H

#include <string>

using namespace std;

class MediaPlayer
{
public:
    virtual ~MediaPlayer() {}

    virtual void play(string audioType, string fileName) = 0;
};

class AdvanceMediaPlayer
{
public:
    virtual ~AdvanceMediaPlayer() {}

    virtual void playVlc(string fileName);
    virtual void playMp4(string fileName);
};

class VlcPlayer : public AdvanceMediaPlayer
{
public:
    void playVlc(string fileName) override;
};

class Mp4Player : public AdvanceMediaPlayer
{
public:
    void playMp4(string fileName) override;
};

class MediaAdapter : public MediaPlayer
{
public:
    MediaAdapter(string audioType);
    ~MediaAdapter();
    void play(string audioType, string fileName) override;
private:
    AdvanceMediaPlayer* advanceMediaPlayer;
};

class AudioPlayer : public MediaPlayer
{
public:
    ~AudioPlayer();
    void play(string audioType, string fileName) override;
private:
    MediaAdapter* mediaAdapter;
};

#endif // ADAPTER_PATTERN_H
